利用Jenkins+ansible部署VUE项目自动打包更新文件夹

vue项目自动打包推送。需要npm run install
针对前端VUE版本更新,自动下载、打包、备份、上传全量更新
第一步:点击选择需要部署的城市,会自动生成部署的项目信息,确认IP和项目路径
第二步:点击构建

jobs应用场景

公司代码库利用npm run build:prod打包后传送接口文件夹到目标服务器,因为公司项目问题遗留都部署一个文件夹,不能用传统的直接操作文件夹,只能通过这种方式去部署。

目录:DPstatic  文件:data.json  favicon.ico  index.html

首先打完包后备份部署服务器的源文件到/data/backup目录下,传送新版本文件夹到目标服务器,

一、构建界面

二、指定构建地区

 

 二、构建说明

 三、需要部署到的服务器,下面指定构建Referenced parameters为上面的area_name

四、需要部署到目标服务器路径,下面指定构建Referenced parameters为上面的area_name

 

 

五、git库

六、构建时输出有时间、颜色、全局变量

七、构建shell

 #!/bin/bash    
echo -e "\033[34m#####判断是否正确输入数据#####\033[0m"
if [ -z ${source_file} ] && [ -z ${destination_file} ];then
echo -e "\033[31m未输入参数,请重新输入\033[0m"
exit 1
else
echo -e "\033[34m输入内容正确\033[0m"
fi

echo -e "\033[34m######判断IP是否输入正确#####\033[0m"
cat /etc/ansible/hosts | grep -v "#" | awk  '{print $1}' | grep ${destination_ip}
if [ $? -eq 0 ]
   then
       echo -e "\033[34m此IP在hosts列表,可以执行同步\033[0m"
   else
       echo -e "\033[31m确定IP,先添加到hosts文件\033[0m"
       exit 1
fi
echo -e "\033[34m#######打印输入#####\033[0m"
echo -e "\033[34m源路径:${source_file}\033[0m"
echo -e "\033[34m目标路径:${destination_file}\033[0m"
echo -e "\033[34m目标IP:${destination_ip}\033[0m"
        
if [ $GIT_PREVIOUS_SUCCESSFUL_COMMIT == $GIT_COMMIT ] 
then
echo -e "版本相同无需打包"
else
        echo -e "\033[34m开始执行npm  install\033[0m"
        #/usr/local/node/bin/npm install -g yarn
        #yarn install
        cnpm install
        sleep 5
        
             [ $? -eq 0 ] && echo -e "\033[32m 执行npm install成功。\033[0m" || { 
            echo -e "\033[31m执行npm install失败。\033[0m"
            exit 1
        }
        echo -e "\033[34m执行npm run build\033[0m"
        nohup /usr/local/node/bin/npm run build:prod  &
       
        sleep 40
         kill 2
        [ $? -eq 0 ] && echo -e "\033[32m 执行npm run build成功。\033[0m" || { 
            echo -e "\033[31m执行npm run build失败。\033[0m"
            exit 1
        }
        cd ${source_file}
        zip -r ${source_filezip} ./ && {
        echo -e "\033[32m压缩成功。\033[0m"
        } || {
            echo -e "\033[32m压缩失败。\033[0m"
            exit 1
        }
         \mv ${source_filezip} $WORKSPACE
fi

#####利用ansible进行文件拷贝

date=`date "+%Y-%m-%d-%H-%M-%S"`
echo -e "\033[34m#####目标文件备份#####\033[0m"
echo ${destination_file} > /tmp/name
backup_name=/data/backup/front-"`cat /tmp/name | awk -F "/" '{print $5}'`"/"`cat /tmp/name | awk -F "/" '{print $5}'`".bak${date}


echo -e "\033[34m#判断备份目录是否存在,不存在重新创建\033[0m"
ansible ${destination_ip} -m file -a 'path={{ backup_name }}  state=directory'  -e  backup_name=${backup_name}
echo -e "\033[34m$backup_name备份目录创建完成\033[0m"

echo -e "\033[34m#判断发版目录是否存在,不存在重新创建\033[0m"
ansible ${destination_ip} -m file -a 'path={{ destination_file }}  state=directory'  -e  destination_file=${destination_file}
echo -e "\033[34m$backup_name发版目录创建完成\033[0m"

echo -e "\033[34m###开始备份###\033[0m"
DPstatic=${destination_file}/DPstatic
data_json=${destination_file}/data.json
favicon_ico=${destination_file}/favicon.ico
index_html=${destination_file}/index.html

#back_file=${destination_file##*/}
ansible "$destination_ip" -m command -a '\mv  "{{ DPstatic }}" "{{ backup_name }}"' -e DPstatic=${DPstatic} -e backup_name=${backup_name}
 [ $? -eq 0 ] && echo -e "\033[34m ${DPstatic}备份完成\033[0m" || { 
            echo -e "\033[31m${DPstatic}备份失败\033[0m"
            exit 1
        }
ansible "$destination_ip" -m command -a '\mv  "{{ data_json }}" "{{ backup_name }}"' -e data_json=${data_json} -e backup_name=${backup_name}
 [ $? -eq 0 ] && echo -e "\033[34m ${data_json}备份完成\033[0m" || { 
            echo -e "\033[31m${data_json}备份失败\033[0m"
            exit 1
        }
ansible "$destination_ip" -m command -a '\mv  "{{ favicon_ico }}" "{{ backup_name }}"' -e favicon_ico=${favicon_ico} -e backup_name=${backup_name}
 [ $? -eq 0 ] && echo -e "\033[34m ${favicon_ico}备份完成\033[0m" || { 
            echo -e "\033[31m${favicon_ico}备份失败\033[0m"
            exit 1
        }
ansible "$destination_ip" -m command -a '\mv  "{{ index_html }}" "{{ backup_name }}"' -e index_html=${index_html} -e backup_name=${backup_name}
 [ $? -eq 0 ] && echo -e "\033[34m ${index_html}备份完成\033[0m" || { 
            echo -e "\033[31m${index_html}备份失败\033[0m"
            exit 1
        }


echo -e "\033[34m###开始同步###  \033[0m"      
ansible "$destination_ip" -m copy -a 'src="{{ source_filezip }}" dest="{{ destination_file }}"' -e source_filezip=${WORKSPACE}/${source_filezip} -e destination_file=${destination_file}
result=$?
[ ${result} -eq 0 ] && echo -e "\033[34m${source_filezip}同步完成!\033[0m" || {
exit $result
echo -e "\033[31m${source_filezip}同步失败!\033[0m"
}

echo -e "\033[34m###开始解压###  \033[0m"      
ansible "$destination_ip" -m command -a 'unzip -o -d "{{ destination_file }}" "{{ source_filezip }}"' -e source_filezip=${destination_file}/${source_filezip} -e destination_file=${destination_file}
result=$?
[ ${result} -eq 0 ] && echo -e "\033[34m${source_filezip}解压完成!\033[0m" || {
exit $result
echo -e "\033[31m${source_filezip}解压失败!\033[0m"
}

echo -e "\033[34m###目录权限添加###  \033[0m"      
ansible "$destination_ip" -m command -a 'chmod -R o+r "{{ destination_file }}"' -e destination_file=${destination_file}
result=$?
[ ${result} -eq 0 ] && echo -e "\033[34m${source_filezip}权限添加成功!\033[0m" || {
exit $result
echo -e "\033[31m${source_filezip}权限添加失败!\033[0m"
}

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
JenkinsAnsible是两个广泛使用的自动化工具,可以帮助简化软件开发和部署过程。 Jenkins是一个开源的持续集成和自动化工具,常用于编译代码、运行测试、部署软件等任务。它提供了一个易于使用的用户界面,可以通过配置和连接各种工具和插件实现自动化流程。Jenkins可以与版本控制系统(如Git)集成,可以通过定时触发或通过触发特定的事件来自动执行任务。 Ansible是一个自动化工具,用于配置管理、应用程序部署和任务执行。它采用基于SSH的无需客户端的架构,可以通过编写简单的YAML文件来描述服务器的配置和应用的部署Ansible可以在本地或远程执行任务,并可以轻松地进行水平扩展。 结合JenkinsAnsible可以实现更高效和灵活的自动部署流程。可以将Jenkins用作任务调度和流程控制的中心,通过Jenkins的插件支持,与Ansible进行集成。通过在Jenkins中配置Ansible插件,可以直接在Jenkins上运行Ansible Playbook,并灵活地控制各个部署和配置任务。 使用JenkinsAnsible可以实现以下功能: 1. 通过Jenkins触发自动部署任务,对软件进行编译、测试和打包。 2. 使用Jenkins上的用户界面配置Ansible的执行环境和主机清单。 3. 创建和管理Ansible Playbook来描述服务器的配置和应用的部署过程。 4. 在Jenkins中通过添加Ansible插件来执行Ansible Playbook,自动部署软件和配置环境。 5. 通过Jenkins的日志和报告功能,可以方便地查看和分析部署过程中的问题和错误。 总之,JenkinsAnsible的结合可以大大简化软件开发和部署过程,提高工作效率和软件质量。不仅可以实现简单的部署任务,还可以通过灵活的配置和扩展,满足不同项目和环境的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三颗草丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值